home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Presentations / Presentations ’97 / Sessions ’97 / Multiplatform Code⁄Data Sharing / HelloBothWorlds / GE / LibHdr / dispctrl.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-02-17  |  7.8 KB  |  291 lines  |  [TEXT/CWIE]

  1. /*
  2.     DispCtrl.h
  3.     
  4.     Display Controller routines for Graphic Elements
  5.     
  6.     Copyright 1994 by Al Evans. All rights reserved.
  7.     
  8.     3/7/94
  9.  
  10.     Updated 5/25/95 for Graphic Elements version 3.0
  11.     
  12.     Updated 11/29/95 for GE for Windows95 1.0 -- AE
  13.     
  14. */
  15.  
  16. #ifndef DISPCTRL
  17. #define DISPCTRL
  18.  
  19. #include "Defs.h"
  20. #include "GETimer.h"
  21. #include "GELoaders.h"
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27.  
  28. // Creation of new GEWorld
  29.  
  30. /*
  31.     Returns pointer to a new GEWorld. This world covers the area of worldPort
  32.     specified by worldRect (in port coordinates), if scale is scaleOneToOne.
  33.     
  34.     Scale determines the interpretation of the position and size of worldRect 
  35.     within worldPort. Briefly, if a GEWorld has a certain position and size in
  36.     a GrafPort at scaleOneToOne, that GEWorld will have the same *relative* position
  37.     and size, if the horizontal and vertical dimensions of the GrafPort are halved,
  38.     at a scale of 0x00008000 (0.5 in fixed-point notation). 
  39.         
  40.     If it is not nil, worldColors must be a handle to a color table appropriate 
  41.     for an 8-bit depth.
  42.     
  43. */
  44.  
  45. GEWorldPtr NewGEWorld(GrafPtr worldPort, Rect *worldRect, Fixed scale, CTabHandle worldColors);
  46.  
  47.  
  48. // Destruction of a GEWorld
  49.  
  50. /*
  51.     Disposes of a world and everything in it.
  52. */
  53.  
  54. void DisposeGEWorld(GEWorldPtr world);
  55.  
  56.  
  57. // Management of a GEWorld
  58.  
  59. /*
  60.     Set default loader function for world.  If no loader is specified when a new
  61.     Graphic Element is created, this function is used.
  62.     
  63.     In a newly-created world, this loader function is one which creates an offscreen
  64.     graphics environment and loads one or more PICTS from an open resource fork into it 
  65.     (Mac version), or loads one or more .BMP files named Pn.BMP, where "n" is a number
  66.     analogous to the resource number of a Mac PICT (Windows 95 version).
  67. */
  68.  
  69. void SetDefaultLoadFunc(GEWorldPtr world, GraphicLoadFunc loader);
  70.  
  71. /*
  72.     Set frame post-processing function and data for world. If this function is
  73.     present, it will be called after every frame update.
  74. */
  75.  
  76. void SetPostProcFunc(GEWorldPtr world, FramePostProcFunc postProcFunc, Ptr postProcData);
  77.  
  78. /*
  79.     Activate or deactivate an individual world
  80. */
  81.  
  82. void ActivateWorld(GEWorldPtr world, Boolean turnItOn);
  83.  
  84. /*
  85.     Get and set projection rate
  86.     These are NOT very useful, but MAY improve performance in some situations on
  87.     slower machines.
  88. */
  89.  
  90. void SetProjectionRate(GEWorldPtr world, short newMSPerFrame);
  91.  
  92. short GetProjectionRate(GEWorldPtr world);
  93.  
  94.  
  95. /*
  96.     Manipulate world coordinate system;
  97. */
  98.  
  99. /*
  100.     GetGEWorldFocus and SetGEWorldFocus should be used to "bracket" calls to
  101.     FocusOnGEWorld, in order to save and restore the previous focus.
  102. */
  103.  
  104. void GetGEWorldFocus(GEWorldPtr world, Point *currFocus);
  105. void SetGEWorldFocus(GEWorldPtr world, Point newFocus);
  106.  
  107. /*
  108.     Sets focus, i.e. coordinate system, to that of world
  109. */
  110.  
  111. void FocusOnGEWorld(GEWorldPtr world);
  112.  
  113. /*
  114.     Move an entire GEWorld relative to its window
  115. */
  116.  
  117. void MoveGEWorld(GEWorldPtr world, short dh, short dv);
  118. void MoveGEWorldTo(GEWorldPtr world, short h, short v);
  119.  
  120. /*
  121.     Scale a distance to the current world's worldScale.
  122.     This is necessary ONLY in creating new Graphic Elements,
  123.     for determining size and position within a world.
  124.     
  125.     Returns value * world->worldScale / 65536. If result is 0, returns
  126.     1 if value was positive, -1 if value was negative.
  127. */
  128.  
  129. short ScaleToWorld(GEWorldPtr world, short value);
  130.  
  131. /*
  132.     Generate a frame showing the world in its current state and display it on the screen.
  133.     Should be called frequently from application program, for example once each time
  134.     through the main event loop or message loop.
  135.     
  136.     If invalidate is true, the entire world is redrawn. Otherwise, only the changed
  137.     portions of world are updated.
  138. */
  139.  
  140. // If world manager is in use for world, this will update all worlds registered with manager
  141. void DoWorldUpdate(GEWorldPtr world, Boolean invalidate);
  142.  
  143. // Updates ONLY the specified GEWorld
  144. void Update1GEWorld(GEWorldPtr world, Boolean invalidate);
  145.  
  146. /*
  147.     Call from event/message handler when mouse down in the window containing world.
  148.     Returns true if mouseDown was handled by a sensor, false otherwise.
  149. */
  150.  
  151. // If world manager is in use for world, this will check sensors 
  152. // in all worlds registered with manager
  153. Boolean MouseDownInSensor(GEWorldPtr world, Point gMousePt);
  154.  
  155. // Checks sensors in ONLY the specified GEWorld
  156. Boolean MouseDownIn1World(GEWorldPtr world, Point gMousePt);
  157.  
  158. //Services provided by Display Controller for Graphic Elements
  159.  
  160. //Creation and destruction
  161.  
  162. /* 
  163.     Low-level element creation. This function allocates an element, calls its
  164.     GraphicLoadFunc proc (if any), and links it into the world. In itself, it 
  165.     initializes only the fields element->objectID and element-<drawPlane (in
  166.     addition to those initialized by the GraphicLoadFunc).
  167.     
  168.     It is normally called only from a higher-level creation function.
  169. */
  170.  
  171. GrafElPtr NewGrafElement(GEWorldPtr world, OSType id, short plane, short elemSize,
  172.                             GraphicLoadFunc loadProc, short resStart, short nRsrcs);
  173.                             
  174. /*
  175.     Unlinks a graphic element from its world and disposes of it. Calls element's
  176.     cleanupProc, if any. Recursively disposes of element's slaveGrafEl(s). If element
  177.     has a masterGrafEl, sets masterGrafEl->slaveGrafEl to nil.
  178. */
  179.  
  180. void DisposeGrafElement(GEWorldPtr world, OSType objectID);
  181.  
  182. //Access
  183.  
  184. /*
  185.     Returns individual element with ID objectID
  186. */
  187.  
  188. GrafElPtr FindElementByID(GEWorldPtr world, OSType objectID);
  189.  
  190. /*
  191.     Returns first element with drawPlane == plane. For collision checking, etc.
  192. */
  193.  
  194. GrafElPtr ElementsInPlane(GEWorldPtr world, short plane);
  195.  
  196. //Control
  197.  
  198. /*
  199.     ShowElement shows or hides a graphic element, depending on the value of showIt
  200. */
  201.  
  202. void ShowElement(GEWorldPtr world, OSType elementID, Boolean showIt);
  203.  
  204. /*
  205.     Test whether element is presently visible
  206. */
  207.  
  208. Boolean ElementVisible(GEWorldPtr world, OSType elementID);
  209.  
  210. /*
  211.     Move graphic elements
  212. */
  213.  
  214. void MoveElement(GEWorldPtr world, OSType elementID, short dh, short dv);
  215. void MoveElementTo(GEWorldPtr world, OSType elementID, short h, short v);
  216.  
  217. // Alternate interface: avoid lookup when GrafElPtr already available, for example
  218. // in Autochange procedures.
  219. // For PtrMoveElementTo(), h and v are in absolute pixels if doScale is false
  220.  
  221. void PtrMoveElement(GEWorldPtr world, GrafElPtr element, short dh, short dv);
  222. void PtrMoveElementTo(GEWorldPtr world, GrafElPtr element, short h, short v, Boolean doScale);
  223.  
  224. /*
  225.     Sets element's plane to newPlane
  226. */
  227.  
  228. void SetElementPlane(GEWorldPtr world, OSType elementID, short newPlane);
  229.  
  230. /*
  231.     Set element's autochange parameters
  232. */
  233.  
  234. void SetAutoChange(GEWorldPtr world, OSType elementID, AutoChangeProc changeProc,
  235.                         Ptr changeData, short changeIntrvl);
  236.                         
  237. /*
  238.     Set element's collision parameters. No collision if collidePlane == 0
  239. */
  240.  
  241. void SetCollision(GEWorldPtr world, OSType elementID, CollisionProc collideProc, 
  242.                         short collidePlane);
  243.                         
  244. /*
  245.     Set element's custom dispose proc.
  246. */
  247.  
  248. void SetCleanupProc(GEWorldPtr world, OSType elementID, CleanupProc elemCleanup);
  249.  
  250. // Miscellaneous sensor services
  251.  
  252. // Add sensor to world's sensor list and make it active
  253. void AddSensorToList(GEWorldPtr world, OSType id, Rect *sensorRect);
  254.  
  255. // Remove sensor from world's sensor list and make it inactive
  256. void RemoveSensorFromList(GEWorldPtr world, OSType id);
  257.  
  258. // Set sensor's actionProc to newAction
  259. void SetSensorAction(GEWorldPtr world, OSType sensorID, SensorAction newAction);
  260.  
  261. // Get element's entry in world->sensorList, if any
  262. SListEntryPtr FindSensorListEntry(GEWorldPtr world, OSType sensorID);
  263.  
  264. /*
  265.     If anything in a world is changed from OUTSIDE the Graphic Elements system,
  266.     call this procedure with the affected rectangle.
  267. */
  268.  
  269. void ChangedRect(GEWorldPtr world, Rect *chgdRect);
  270.  
  271. /* 
  272.     Windows/DIB version ONLY!
  273.     Update palettes of all worlds to newPalette
  274. */
  275. #ifdef TARGET_IS_WIN95
  276. #if !USING_DIRECTDRAW        
  277.  
  278. // Notify Graphic Elements that the palette has been changed
  279. // Updates palette information for all worlds on world list
  280. void GEPaletteChanged(GEWorldPtr world, HPALETTE newPalette);
  281.  
  282. #endif
  283. #endif
  284.  
  285. #ifdef __cplusplus
  286. }
  287. #endif
  288.  
  289.  
  290. #endif
  291.